home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / ctlmod / resetp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-12-08  |  1.9 KB  |  86 lines

  1. # include    "ctlmod.h"
  2. # include    <ingres.h>
  3. # include    <tree.h>
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)resetp.c    8.2    12/8/85)
  7.  
  8. /*
  9. **  RESETP -- reset parameters from call.
  10. **
  11. **    This must be called after an initp-setp-call sequence to
  12. **    reclaim the memory gathered by the initp.  It can also be
  13. **    used in an initp-setp sequence to clean up if an error is
  14. **    found.
  15. **
  16. **    Parameters:
  17. **        none.
  18. **
  19. **    Returns:
  20. **        none.
  21. **
  22. **    Side Effects:
  23. **        Restores the old context.
  24. **        Reclaims space from Qbuf.
  25. **
  26. **    Trace Flags:
  27. **        4.4 - 4.7
  28. */
  29.  
  30. resetp()
  31. {
  32.     extern char    *Proc_name;
  33.  
  34. # ifdef xCTR1
  35.     if (tTf(4, 4))
  36.         printf("resetp: ctx_new=%d _init=%d _link=%x _pmark=%d _cmark=%d\n",
  37.             Ctx.ctx_new, Ctx.ctx_init, Ctx.ctx_link, Ctx.ctx_pmark,
  38.             Ctx.ctx_cmark);
  39. # endif
  40.  
  41.     /* don't do anything if no matching "initp" call */
  42.     if (!Ctx.ctx_new)
  43.         return;
  44.  
  45.     /* If the Current Qt header matches the new context clean things up */
  46.     if ((char *)Ctx.ctx_link == Qt.qt_ctx)
  47.         Qt.qt_ctx = NULL;
  48.  
  49.     /*
  50.     **    The 'freebuf' to ctx_cmark will also deallocate
  51.     **    any parameters, since ctx_pmark >= ctx_cmark
  52.     **    always.
  53.     */
  54.  
  55.     if (Ctx.ctx_link != NULL)
  56.         bmove((char *) Ctx.ctx_link, (char *) &Ctx, Ctx.ctx_size);
  57. # ifdef xCM_DEBUG
  58.     if (Ctx.ctx_pmark < Ctx.ctx_cmark)
  59.         syserr("resetp: pmark %d cmark %d", Ctx.ctx_pmark, Ctx.ctx_cmark);
  60. # endif
  61.     freebuf(Qbuf, Ctx.ctx_cmark);
  62.     tT = Ctx.ctx_tvect;
  63.     Proc_name = Ctx.ctx_name;
  64. # ifdef xCTR1
  65.     if (tTf(4, 5))
  66.         lprintf("resetp: free %d\n", Ctx.ctx_cmark);
  67. # endif
  68.  
  69.     /*
  70.     **    If there was a Qt associated with this context,
  71.     **    restore it also.  If not, but there was a Qt
  72.     **    associated with the context we just deallocated,
  73.     **    set Qt to be 'unallocated'.
  74.     */
  75.     if (Ctx.ctx_qt != NULL)
  76.     {
  77.         /* first free any descriptors */
  78.         clrrange();
  79.         bmove((char *) Ctx.ctx_qt, (char *) &Qt, sizeof Qt);
  80.         free(Ctx.ctx_qt);
  81.         Ctx.ctx_qt = NULL;
  82.     }
  83.     else if (Qt.qt_ctx == NULL)
  84.         Qt.qt_active = 0;
  85. }
  86.